class Solution {
public:
    string solve(string s, string t) {
        // 特判：有一个是 "0"
        if (s == "0" || t == "0") return "0";

        int n = s.size();
        int m = t.size();
        // 结果最多 n + m 位，先全部置为 '0'
        string res(n + m, '0');

        // 从低位到高位做竖式乘法
        for (int i = n - 1; i >= 0; --i) {
            int x = s[i] - '0';
            int carry = 0;
            for (int j = m - 1; j >= 0; --j) {
                int y = t[j] - '0';
                int cur = res[i + j + 1] - '0';      // 当前位置已有的值
                int sum = cur + x * y + carry;       // 累加乘积+进位

                res[i + j + 1] = char(sum % 10 + '0');
                carry = sum / 10;
            }
            // 内层循环结束后，可能还有进位，落在更高一位
            res[i] = char(res[i] - '0' + carry + '0');
        }

        // 去掉前导 0
        int start = 0;
        while (start < (int)res.size() && res[start] == '0') ++start;
        if (start == (int)res.size()) return "0"; // 理论上不会走到这里

        return res.substr(start);
    }
};